{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.metrics import log_loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Pregnancies</th>\n",
       "      <th>Glucose</th>\n",
       "      <th>BloodPressure</th>\n",
       "      <th>SkinThickness</th>\n",
       "      <th>Insulin</th>\n",
       "      <th>BMI</th>\n",
       "      <th>DiabetesPedigreeFunction</th>\n",
       "      <th>Age</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>6</td>\n",
       "      <td>148</td>\n",
       "      <td>72</td>\n",
       "      <td>35</td>\n",
       "      <td>0</td>\n",
       "      <td>33.6</td>\n",
       "      <td>0.627</td>\n",
       "      <td>50</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>85</td>\n",
       "      <td>66</td>\n",
       "      <td>29</td>\n",
       "      <td>0</td>\n",
       "      <td>26.6</td>\n",
       "      <td>0.351</td>\n",
       "      <td>31</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>8</td>\n",
       "      <td>183</td>\n",
       "      <td>64</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>23.3</td>\n",
       "      <td>0.672</td>\n",
       "      <td>32</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>89</td>\n",
       "      <td>66</td>\n",
       "      <td>23</td>\n",
       "      <td>94</td>\n",
       "      <td>28.1</td>\n",
       "      <td>0.167</td>\n",
       "      <td>21</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>137</td>\n",
       "      <td>40</td>\n",
       "      <td>35</td>\n",
       "      <td>168</td>\n",
       "      <td>43.1</td>\n",
       "      <td>2.288</td>\n",
       "      <td>33</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Pregnancies  Glucose  BloodPressure  SkinThickness  Insulin   BMI  \\\n",
       "0            6      148             72             35        0  33.6   \n",
       "1            1       85             66             29        0  26.6   \n",
       "2            8      183             64              0        0  23.3   \n",
       "3            1       89             66             23       94  28.1   \n",
       "4            0      137             40             35      168  43.1   \n",
       "\n",
       "   DiabetesPedigreeFunction  Age  Outcome  \n",
       "0                     0.627   50        1  \n",
       "1                     0.351   31        0  \n",
       "2                     0.672   32        1  \n",
       "3                     0.167   21        0  \n",
       "4                     2.288   33        1  "
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diabetes = pd.read_csv('diabetes.csv')\n",
    "diabetes.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(768, 8)"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "X = diabetes.drop(['Outcome'],axis=1)\n",
    "y = diabetes['Outcome']\n",
    "\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "ss_X = StandardScaler()\n",
    "X = ss_X.fit_transform(X)\n",
    "X.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((614, 8), (154, 8), (614,), (154,))"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=666)\n",
    "X_train.shape,X_test.shape,y_train.shape,y_test.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### defaut Logistic Regression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\cross_validation.py:41: DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.\n",
      "  \"This module will be removed in 0.20.\", DeprecationWarning)\n"
     ]
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.cross_validation import cross_val_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([0.49027529, 0.47391176, 0.52748015, 0.50581481, 0.50235391]),\n",
       " 0.4999671843242302)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr = LogisticRegression()\n",
    "loss = cross_val_score(lr,X_train,y_train,cv=5,scoring='neg_log_loss')\n",
    "-loss,-loss.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### GridSearchCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "GridSearchCV(cv=5, error_score='raise',\n",
       "       estimator=LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n",
       "          intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,\n",
       "          penalty='l2', random_state=None, solver='liblinear', tol=0.0001,\n",
       "          verbose=0, warm_start=False),\n",
       "       fit_params=None, iid=True, n_jobs=1,\n",
       "       param_grid={'penalty': ['l1', 'l2'], 'C': [0.001, 0.01, 0.1, 1, 10, 100, 1000]},\n",
       "       pre_dispatch='2*n_jobs', refit=True, return_train_score='warn',\n",
       "       scoring='neg_log_loss', verbose=0)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "penaltys = ['l1','l2']\n",
    "Cs = [0.001,0.01,0.1,1,10,100,1000]\n",
    "param_grid = dict(penalty=penaltys,C=Cs)\n",
    "\n",
    "lr_grid = LogisticRegression()\n",
    "grid = GridSearchCV(lr_grid,param_grid,cv=5,scoring='neg_log_loss')\n",
    "grid.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "D:\\Program Files\\Anaconda3\\lib\\site-packages\\sklearn\\utils\\deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([0.00140033, 0.00160012, 0.00130033, 0.00260019, 0.002     ,\n",
       "        0.00190063, 0.00210009, 0.00230012, 0.0019999 , 0.00199957,\n",
       "        0.00189939, 0.00200033, 0.00220032, 0.0019001 ]),\n",
       " 'std_fit_time': array([5.83044855e-04, 2.00224008e-04, 2.44308624e-04, 8.00252193e-04,\n",
       "        3.15677817e-04, 1.99771859e-04, 2.00224008e-04, 3.99577663e-04,\n",
       "        7.89305942e-07, 2.33601546e-07, 2.01177682e-04, 4.47501371e-04,\n",
       "        2.44543062e-04, 3.74011188e-04]),\n",
       " 'mean_score_time': array([0.00099993, 0.00100017, 0.00100002, 0.00120029, 0.00110059,\n",
       "        0.00120077, 0.00120029, 0.00140052, 0.00110049, 0.00090079,\n",
       "        0.0009006 , 0.00100079, 0.00150094, 0.00100036]),\n",
       " 'std_score_time': array([3.16280483e-04, 3.37174788e-07, 7.77697870e-07, 2.44817113e-04,\n",
       "        1.99771119e-04, 4.00614891e-04, 3.99781041e-04, 3.74495603e-04,\n",
       "        5.83854484e-04, 1.99938190e-04, 2.00200613e-04, 3.16280325e-04,\n",
       "        7.75372169e-04, 3.16581896e-04]),\n",
       " 'param_C': masked_array(data=[0.001, 0.001, 0.01, 0.01, 0.1, 0.1, 1, 1, 10, 10, 100,\n",
       "                    100, 1000, 1000],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'param_penalty': masked_array(data=['l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1', 'l2', 'l1',\n",
       "                    'l2', 'l1', 'l2', 'l1', 'l2'],\n",
       "              mask=[False, False, False, False, False, False, False, False,\n",
       "                    False, False, False, False, False, False],\n",
       "        fill_value='?',\n",
       "             dtype=object),\n",
       " 'params': [{'C': 0.001, 'penalty': 'l1'},\n",
       "  {'C': 0.001, 'penalty': 'l2'},\n",
       "  {'C': 0.01, 'penalty': 'l1'},\n",
       "  {'C': 0.01, 'penalty': 'l2'},\n",
       "  {'C': 0.1, 'penalty': 'l1'},\n",
       "  {'C': 0.1, 'penalty': 'l2'},\n",
       "  {'C': 1, 'penalty': 'l1'},\n",
       "  {'C': 1, 'penalty': 'l2'},\n",
       "  {'C': 10, 'penalty': 'l1'},\n",
       "  {'C': 10, 'penalty': 'l2'},\n",
       "  {'C': 100, 'penalty': 'l1'},\n",
       "  {'C': 100, 'penalty': 'l2'},\n",
       "  {'C': 1000, 'penalty': 'l1'},\n",
       "  {'C': 1000, 'penalty': 'l2'}],\n",
       " 'split0_test_score': array([-0.69314718, -0.6493208 , -0.66821994, -0.54661195, -0.50719466,\n",
       "        -0.49530272, -0.49125612, -0.49027529, -0.49009932, -0.48999928,\n",
       "        -0.48998508, -0.48997589, -0.4899755 , -0.4899736 ]),\n",
       " 'split1_test_score': array([-0.69314718, -0.6421942 , -0.68224043, -0.52724871, -0.47418215,\n",
       "        -0.47702371, -0.4726538 , -0.47391176, -0.47378683, -0.47392657,\n",
       "        -0.47392533, -0.47393375, -0.47393604, -0.47393453]),\n",
       " 'split2_test_score': array([-0.69314718, -0.64814715, -0.66981545, -0.54865889, -0.51929595,\n",
       "        -0.52003704, -0.52611564, -0.52748015, -0.52895255, -0.5291026 ,\n",
       "        -0.52926124, -0.52927971, -0.52929494, -0.52929758]),\n",
       " 'split3_test_score': array([-0.69314718, -0.64866558, -0.66733618, -0.54821109, -0.52381976,\n",
       "        -0.50583424, -0.50685887, -0.50581481, -0.50640005, -0.50631   ,\n",
       "        -0.50637233, -0.50636766, -0.50637322, -0.50637352]),\n",
       " 'split4_test_score': array([-0.69314718, -0.64795771, -0.66825711, -0.54434087, -0.51441907,\n",
       "        -0.50216744, -0.50264264, -0.50235391, -0.50284945, -0.50283215,\n",
       "        -0.50288828, -0.50288768, -0.502895  , -0.50289332]),\n",
       " 'mean_test_score': array([-0.69314718, -0.64725701, -0.67118001, -0.54300954, -0.50774443,\n",
       "        -0.50005247, -0.49987554, -0.49993799, -0.50038713, -0.50040365,\n",
       "        -0.50045585, -0.50045834, -0.50046433, -0.50046389]),\n",
       " 'std_test_score': array([0.        , 0.00257788, 0.00559306, 0.00803144, 0.01768171,\n",
       "        0.01408302, 0.01768033, 0.01773508, 0.01830223, 0.01831379,\n",
       "        0.01837106, 0.01837517, 0.01837989, 0.01838135]),\n",
       " 'rank_test_score': array([14, 12, 13, 11, 10,  3,  1,  2,  4,  5,  6,  7,  9,  8],\n",
       "       dtype=int32),\n",
       " 'split0_train_score': array([-0.69314718, -0.64399426, -0.66389431, -0.53288682, -0.49113551,\n",
       "        -0.48300506, -0.47967591, -0.4795677 , -0.47951303, -0.47951152,\n",
       "        -0.47951093, -0.47951092, -0.47951091, -0.47951091]),\n",
       " 'split1_train_score': array([-0.69314718, -0.64810053, -0.68567071, -0.54057778, -0.50081981,\n",
       "        -0.49151892, -0.48831647, -0.488193  , -0.48814078, -0.4881392 ,\n",
       "        -0.48813864, -0.48813863, -0.48813862, -0.48813862]),\n",
       " 'split2_train_score': array([-0.69314718, -0.64450976, -0.67063023, -0.5303351 , -0.4848265 ,\n",
       "        -0.4746597 , -0.47054345, -0.47042027, -0.47034873, -0.47034749,\n",
       "        -0.47034672, -0.4703467 , -0.4703467 , -0.4703467 ]),\n",
       " 'split3_train_score': array([-0.69314718, -0.64477007, -0.66053211, -0.53368652, -0.49138365,\n",
       "        -0.48229783, -0.47871114, -0.47859483, -0.47853417, -0.478533  ,\n",
       "        -0.47853235, -0.47853234, -0.47853233, -0.47853233]),\n",
       " 'split4_train_score': array([-0.69314718, -0.64482264, -0.66537321, -0.53344745, -0.48949308,\n",
       "        -0.48102533, -0.47741751, -0.47726805, -0.47720745, -0.47720592,\n",
       "        -0.47720526, -0.47720525, -0.47720524, -0.47720524]),\n",
       " 'mean_train_score': array([-0.69314718, -0.64523945, -0.66922011, -0.53418674, -0.49153171,\n",
       "        -0.48250137, -0.4789329 , -0.47880877, -0.47874883, -0.47874742,\n",
       "        -0.47874678, -0.47874677, -0.47874676, -0.47874676]),\n",
       " 'std_train_score': array([0.        , 0.00146033, 0.00884596, 0.00341078, 0.00520699,\n",
       "        0.0053904 , 0.00568035, 0.00568201, 0.00568817, 0.00568807,\n",
       "        0.00568813, 0.00568813, 0.00568813, 0.00568813])}"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "grid.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "test_means = grid.cv_results_['mean_test_score']\n",
    "test_std = grid.cv_results_['std_test_score']\n",
    "\n",
    "test_scores = np.array(test_means).reshape(len(Cs),len(penaltys))\n",
    "X_axis = np.log10(Cs)\n",
    "for i,value in enumerate(penaltys):\n",
    "    plt.plot(X_axis,test_scores[:,i],label='penalty:'+str(value))\n",
    "\n",
    "plt.legend()\n",
    "plt.xlabel( 'log(C)' )                                                                                                      \n",
    "plt.ylabel( 'neg-logloss' )\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(-0.49987554399449835, {'C': 1, 'penalty': 'l1'})"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#最佳score和最佳参数\n",
    "grid.best_score_,grid.best_params_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### L1正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=1, penalty='l1',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\n",
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [1,10,100,1000]\n",
    "\n",
    "lrcv_L1 = LogisticRegressionCV(Cs=Cs,cv=5,scoring='neg_log_loss',penalty='l1',solver='liblinear',multi_class='ovr')\n",
    "lrcv_L1.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.49126577, -0.49009975, -0.48998555, -0.4899772 ],\n",
       "        [-0.47265663, -0.47378225, -0.47392235, -0.47393658],\n",
       "        [-0.52611627, -0.52895352, -0.52926389, -0.52929187],\n",
       "        [-0.50685858, -0.50640353, -0.5063734 , -0.5063744 ],\n",
       "        [-0.5026424 , -0.50284811, -0.50288917, -0.50289417]])}"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L1.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_Cs=len(Cs)\n",
    "n_classes = 1\n",
    "scores = -np.mean(lrcv_L1.scores_[1],axis=0)\n",
    "\n",
    "plt.plot(np.log10(Cs), scores) \n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('neg-logloss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### L2正则"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LogisticRegressionCV(Cs=[1, 10, 100, 1000], class_weight=None, cv=5,\n",
       "           dual=False, fit_intercept=True, intercept_scaling=1.0,\n",
       "           max_iter=100, multi_class='ovr', n_jobs=1, penalty='l2',\n",
       "           random_state=None, refit=True, scoring='neg_log_loss',\n",
       "           solver='liblinear', tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.linear_model import LogisticRegressionCV\n",
    "\n",
    "Cs = [1,10,100,1000]\n",
    "\n",
    "lrcv_L2 = LogisticRegressionCV(Cs=Cs,cv=5,scoring='neg_log_loss',penalty='l2',solver='liblinear',multi_class='ovr')\n",
    "lrcv_L2.fit(X_train,y_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1: array([[-0.49027529, -0.48999928, -0.48997589, -0.4899736 ],\n",
       "        [-0.47391176, -0.47392657, -0.47393375, -0.47393453],\n",
       "        [-0.52748015, -0.5291026 , -0.52927971, -0.52929758],\n",
       "        [-0.50581481, -0.50631   , -0.50636766, -0.50637352],\n",
       "        [-0.50235391, -0.50283215, -0.50288768, -0.50289332]])}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lrcv_L2.scores_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "n_Cs=len(Cs)\n",
    "n_classes = 1\n",
    "scores = -np.mean(lrcv_L2.scores_[1],axis=0)\n",
    "\n",
    "plt.plot(np.log10(Cs), scores) \n",
    "plt.xlabel('log(C)')\n",
    "plt.ylabel('neg-logloss')\n",
    "plt.show()"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
